import Vue from 'vue'

/**
 * 检查登录状态
 */
const checkLogin = () => {
    var token = Vue.prototype.getCache('member.token');
    if(!token)
        return false;
    else
        return true;
}

/* 
 * 公共函数，更新登录信息
 * checkLogin true/false 需要验证登录的页面就传值个true
 */
const updateMemberInfo = (checkLogin=false) => {
	return new Promise( (resolve, reject) => {
		//获取保存的Storage
		const member = Vue.prototype.getCache('member');
		if(member.token != ''){
			//ajax确认下保存的 storage 是否真实有效
			Vue.prototype.ajax({
				url:'member/updateMemberInfo',
			}).then(function (res) {
				console.log(res);
				if(res.code == 200){//确定已经登录
					let data = res.data;
					// 头像图片url中特殊字符是否被转义
					if(data.headimage && data.headimage.indexOf('&amp;')!=-1)
						data.headimage = data.headimage.replace(/&amp;/g, "&");
					resolve(data);
					// 在更新下本地缓存的用户信息
					Vue.prototype.setCache('member',data);
					console.log('登录信息更新成功');
				}else{
					Vue.prototype.getCache('member');
					resolve();
					console.log('登录信息更新失败');
					//删除Storage里保存的用户信息
					//Vue.prototype.delCache('member');
					//console.log('登录信息更新失败，缓存登录信息已清空');
				}
			});
		}else{
			resolve('');
			console.log('尚未查询到登录信息');
			//删除Storage里保存的用户信息
			Vue.prototype.delCache('member');
		}
		if( Vue.prototype.getCache('member')=='' && checkLogin==true )
			uni.navigateBack({delta:1})
	})
}

/**
 * 执行第三方登录
 * params.type 第三方登录类型 （{type:'weixin'}）
 * params.apiUrl api保存登录信息入数据库
 */
const otherLogin = (params)=>{
    let self = this;
	if(!params.type){ console.log('缺少执行第三方登录类型，例如：weixin;'); return false; }
	if(!params.apiUrl){ console.log('缺少保存登录信息入数据库的api路径'); return false; }
	uni.showLoading({ title: '登录授权', mask: true });
	return new Promise( (resolve, reject) => {
		uni.getUserProfile ({
			desc:'完善会员资料',
			success:(infoRes) => {
				console.log('获取到的授权登录信息：',infoRes);
				// 执行登陆
				uni.login({
					provider: params.type,
					success: (res) => {
						//console.log(res);
						// api请求地址
						let url = Vue.prototype.$config.apiRoot + params.apiUrl;
							//console.log(params.type);
							//console.log(infoRes);
							let resData = {};
							resData = {
								type: params.isApp ? params.type : 'wxxcx',//小程序时暂时只有微信小程序，需要的自行扩展判断
								code: res.code,
								openid: infoRes.userInfo.openId,
								unionid: infoRes.userInfo.unionId?infoRes.userInfo.unionId:'',
								nickname: infoRes.userInfo.nickName,
								headimage: params.type == 'weixin' ? infoRes.userInfo.avatarUrl : infoRes.userInfo.figureurl_qq,
							    //skip: true, //跳过登录绑定，直接创建账号
							}
							//console.log(resData);
							uni.request({
								url: url, //仅为示例，并非真实接口地址。
								data: resData,
								success: (res) => {
									//console.log(result);
									//还没绑定账号的，跳转到绑定页面
									if(res.data.code == 200){
										// 保存登录信息
										uni.setStorageSync('member', res.data.data);
                                        Vue.prototype.$my.toast('登录成功');
                                        //返回结果数据
                                        resolve(res.data.data);
										// 获取当前的页面栈，决定返回需求
										const page = getCurrentPages();
										// 返回上一页或者跳转到个人中心
										if(page.length > 1)
											setTimeout(function(){ uni.navigateBack({delta:1}); },1000);
										else
											uni.switchTab({url:'/pages/member/index'})
									}
									//跳转到绑定用户页面
									else if(res.data.code == 201){
										//保存一下第三方登录的信息，然后跳转到绑定页面
										var data = {
											"type": params.isApp ? params.type : 'wxxcx',//小程序时暂时只有微信小程序，需要的自行扩展判断
											"code": res.data.code,
											"openid": params.isApp ? infoRes.userInfo.openId : res.data.data.openid,
											"unionid": params.isApp ? infoRes.userInfo.unionId : res.data.data.unionid,
											"nickname": infoRes.userInfo.nickName,
											"headimage": params.type == 'weixin' ? infoRes.userInfo.avatarUrl : infoRes.userInfo.figureurl_qq
										}
										uni.setStorageSync("oauthInfo", data);
										uni.navigateTo({ url: '/pages/member/bind' });
									}else{
										console.log('登录失败!错误返回：', res.data.msg);
										Vue.prototype.$my.toast('登录失败！');
										resolve(false);
									}
								},
								fail: (err) => {
									console.log('err=>>'+err);
									Vue.prototype.$my.toast('第三方登录服务异常！');
								},
								complete: () => {
									uni.hideLoading();
								}
							});
					},
					complete: () => {
						uni.hideLoading();
					},
					/**
					 * 订阅权限按钮
					 */
				})		
			},
			fail:(res) => {
				console.log(res);
				Vue.prototype.$my.toast(res);
			}
		})
	})
}

/**
 * 获取服务供应商
 */
const getProvider = (params)=>{
	const filters = ['weixin','qq'];
	return new Promise( (resolve, reject) => {
		const providerList = [];
		uni.getProvider({
			service: 'oauth',
			success: (res) => {
				if (res.provider && res.provider.length) {
					for (let i = 0; i < res.provider.length; i++) {
						if(~filters.indexOf(res.provider[i])){
							providerList.push({
								id: res.provider[i],
								icon: res.provider[i]
							});
						}
					}
				}
				resolve(providerList);
			},
			fail: (err) => {
				console.error('获取服务供应商失败：' + JSON.stringify(err));
			}
		});
	})
}

/**
 * 第三方登录获取用户信息（会出现返回数据为空的情况）
 */
const getUserInfo = (params)=>{
	if (!params.type) return false;
	console.log(params)
	return new Promise( (resolve, reject) => {
		// 获取用户信息
		uni.getUserInfo({
			provider: params.type,
			success: (infoRes)=> {
				resolve(infoRes.userInfo);
				console.log(infoRes.userInfo);
			}
		});
	})
}

/**
 * 判断预加载一键登录
 */
const getProviderPreLogin = (params)=>{
	return new Promise( (resolve, reject) => {
		uni.getProvider({
			service: 'oauth',
			success: function (res) {
				console.log(res.provider)// ['qq', 'univerify']
				if (~res.provider.indexOf('univerify')) {
					uni.preLogin({
						provider: 'univerify',
						success(){  
							//预登录成功
							resolve(true);
						},
						fail(res){  
							// 预登录失败
							console.log('预登录失败');
							// 根据错误信息判断失败原因，如有需要可将错误提交给统计服务器
                            Vue.prototype.$my.toast(res.metadata.error_data);
							console.log(res);
							// 不显示一键登录选项（或置灰）
							resolve(false);
						}
					})
				}
			}
		})
	})
}

/**
 * 一键登录
 */
const univerify_login = ()=> {
    let self = this;
	uni.showLoading({ title: '登录中...', mask: true });
	uni.login({
		provider: 'univerify',
		univerifyStyle: { // 自定义登录框样式
		//参考`univerifyStyle 数据结构`
			"backgroundColor": "#ffffff",  
			"icon": {
				"path": "/static/logo.png",
				"width": "60",
				"height": "60"
			},
			"otherLoginButton": {  
			      "visible": "false", // 是否显示其他登录按钮，默认值：true    
			  },  
		},
		success(res){ // 登录成功
			console.log(res.authResult);  // {openid:'deviceIDlength+deviceID+gyuid',access_token:'接口返回的 token'}
			Vue.prototype.ajax({
				url: "member/univerify",
				data:{
					openid:res.authResult.openid,
					access_token:res.authResult.access_token,
				},
			}).then(function(res){
				uni.hideLoading();
				if(res.code==200){
					// 保存登录信息
					uni.setStorageSync('member',res.data);
                    Vue.prototype.$my.toast('登录成功');
					// 获取当前的页面栈，决定返回需求
					const page = getCurrentPages();
					// 返回上一页或者跳转到个人中心
					if(page.length > 1)
						setTimeout(function(){ uni.navigateBack({delta:1}); },1000);
					else
						uni.switchTab({url:'/pages/member/index'})
				}else{
					console.log('登录失败!错误返回：' + res.msg);
					Vue.prototype.$my.toast('一键登录失败');
				}
			});
			//关闭一键登录页面
			uni.closeAuthView();
		},
		fail(res){  // 登录失败
			console.log(res.errCode)
			console.log(res.errMsg)
			uni.hideLoading();
			Vue.prototype.$my.toast('登录失败');
		}
	})
}
export default {
    checkLogin,
	updateMemberInfo,
	otherLogin,
	getProvider,
	getUserInfo,
	univerify_login,
	getProviderPreLogin
};